#include <bits/stdc++.h>
using namespace std;
static const int MOD = 1000000007;

// 快速取模加法
inline int add(int a, int b) {
    a += b;
    if (a >= MOD) a -= MOD;
    return a;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, x, y;
    cin >> n >> x >> y;
    // 保证 x 在左，y 在右
    if (x > y) {
        x = n - x;
        y = n - y;
    }
    int d = y - x;  // 最终要达到的宽度

    // dp[d][s]: 宽度 = d，机器人在端点 s 的方案数
    // 我们只需要两个一维数组：cur[s][d], nxt[s][d]
    vector<array<int,2>> cur(d+1), nxt(d+1);
    // 初始：宽度 = 0，机器人在 R (也是 L)，即 s=1
    cur[0][0] = 0;
    cur[0][1] = 1;

    // 对每一个可能的宽度扩张层数 t=1..d，我们都做一次「原子操作枚举」：
    //   - 如果在右端 (s=1)，可以向右扩 +1 或 +2；
    //   - 如果在左端 (s=0)，可以向左扩 +1 或 +2；
    //   - 在右端也可以回填左侧新坑（如果宽度>=2）→ 从右端到左端，宽度 - 1；
    //   - 在左端也可以回填右侧新坑（如果宽度>=2）→ 从左端到右端，宽度 - 1。
    //
    // 所有这些操作枚举完，就能把 cur 转到 nxt。循环 d 步之后，
    // cur[d][1] 就是「宽度正好 d，且在右端」的全部自避免路径数。

    for (int step = 1; step <= d; ++step) {
        // 清零 nxt
        for (int w = 0; w <= d; ++w) {
            nxt[w][0] = nxt[w][1] = 0;
        }
        // 枚举当前所有可能的 (w,s)
        for (int w = 0; w <= d; ++w) {
            // 在左端 s=0
            int v0 = cur[w][0];
            if (v0) {
                // 扩左 +1 → w+1, s=0
                if (w + 1 <= d) nxt[w+1][0] = add(nxt[w+1][0], v0);
                // 扩左 +2 → w+2, s=0
                if (w + 2 <= d) nxt[w+2][0] = add(nxt[w+2][0], v0);
                // 从左端回填右侧坑 → w-1, s=1
                if (w >= 1)   nxt[w-1][1] = add(nxt[w-1][1], v0);
            }
            // 在右端 s=1
            int v1 = cur[w][1];
            if (v1) {
                // 扩右 +1 → w+1, s=1
                if (w + 1 <= d) nxt[w+1][1] = add(nxt[w+1][1], v1);
                // 扩右 +2 → w+2, s=1
                if (w + 2 <= d) nxt[w+2][1] = add(nxt[w+2][1], v1);
                // 从右端回填左侧坑 → w-1, s=0
                if (w >= 1)   nxt[w-1][0] = add(nxt[w-1][0], v1);
            }
        }
        // 交换
        swap(cur, nxt);
    }

    // 最终宽度必须恰好是 d，且在右端 s=1
    cout << cur[d][1] << "\n";
    return 0;
}
